#define _CRT_SECURE_NO_WARNINGS
//作者：宋安康
#include<bits/stdc++.h>
using namespace std;
//蓝桥杯day03

// 1、二分查找

//二分查找的前提
//库函数只能对数组进行二分查找
// 数组元素为单调的

//binary_search函数   查找目标函数   返回bool值

//lower_bound和upper_bound  ----重点
//前提：数组必须为非降序的

//int main() 
//{
//	//vector<int> numbers = { 1 ,3 ,4,7,10 };  //?
//	//int target = 7;
//	////使用binary_search查找目标元素
//	//bool found = binary_search(numbers.begin(),numbers.end(),target);
//	//if (found)
//	//{
//	//	cout << "find\n";
//	//}
//	//else
//	//{
//	//	cout << "not find\n";
//	//}
//
//	////初始化v;
//	//vector<int> v = {5,1,4,6,34,23,10,8,7,2};
//	//sort(v.begin(), v.end());
//	//for (auto &i: v)
//	//{
//	//	cout << i << ' ';
//	//}
//	//cout << "\n";
//
//	////找到第一个大于等于8的元素
//	//cout << (lower_bound(v.begin(), v.end(), 8) - v.begin()) << '\n';
//
//	int data[200];
//	for (int i = 0; i < 200; i++)
//	{
//		data[i] = 4 * i + 6;
//	}
//	int target;
//	cin >> target;
//	cout << (lower_bound(data, data + 200, target) - data) << "\n";
//
//	printf("hello world\n");
//	return 0;
//}

//2、全排列
// next_permutation()函数
// 用于生成当前序列的下一个排列,存在下一个排列返回 true

//prev_permutation()函数
//用于生成当前序列的上一个排列,存在上一个排列返回 true
//int a[10];
//int main() 
//{
//	//vector<int> nums = {1,2,3};
//	//cout << "Initial permutation:";
//	//for (int num : nums)
//	//{
//	//	cout << num << " ";
//
//	//}
//	//cout << endl;
//
//	//while (next_permutation(nums.begin(),nums.end()))
//	//{
//	//	cout << "Next permutaiom ";
//	//	for (int num : nums)
//	//	{
//	//		cout << num << " ";
//	//	}
//	//	cout << endl;
//	//}
//
//	//for (int i = 0; i <=4; i++)
//	//{
//	//	a[i] = i;
//	//}
//	a[1] = 1;
//	a[2] = 3;
//	a[3] = 4;
//	a[4] = 2;
//	bool tag = true;
//	while (tag)
//	{
//		for (int i = 1;i<= 4;i++) 
//		{
//			cout << a[i] << ' ';
//		}
//		cout << '\n';
//		tag = next_permutation(a + 1, a + 1 + 4);
//	}
//
//	return 0;
//}

//其他库函数
//memset()是一个用于设置内存块值的函数
//定义在<cstring>头文件中
//void* memset(void* ptr,int value,size_num)
//初始化内存块，将其设定为特定的值
//将数组语言初始化为0
//int arr[10];
//memset(arr, 0, sizeof(arr));
//int main() 
//{
//	int arr[10];
//	//memset(arr, 0, sizeof(arr));
//	memset(arr ,1,sizeof arr);
//	for (int i = 0; i < 10; i++)
//	{
//cout <<bitset<32>(arr[i]) << '\n';  //32位查看//
//	}
//	return 0;
//}

//swap
//可以用于交换任意类型的变量
//swap(T &a,T &b);

//reverse() 是一个用于反转容器中元素顺序的函数
//int main() 
//{
//	vector<int> vec = {1,2,3,4,5};
//	reverse(vec.begin(), vec.end());
//
//	for (int num : vec)
//	{
//		cout << num << " ";
//	}
//	cout << endl;
//}

//unique()用于除去容器中相邻重复元素的函数
int main()
{
	vector<int> vec = { 1,2,2,3,3,3,4,4,5 };
	auto it= unique(vec.begin(), vec.end());
	vec.erase(it, vec.end()); 
	for (int num : vec)
	{
		cout << num << " ";
	}
	cout << endl;
}